<?php

App::uses('AppController', 'Controller');

class MatriculaDisciplinasController extends AppController {
	
	public function alterar($id = null){
		
		$this->set('title_for_layout', 'Matrícula Disciplinas:: Alterar');
		
		if ($this->request->data){
			if ($this->{$this->modelClass}->save($this->request->data)){
				$this->Session->setFlash('Dados alterados com sucesso.', 'default', array('class' => 'flashOk'));
				$this->redirect(array('controller' => 'matriculas', 'action' => 'alterar', $this->request->data[$this->modelClass]['matricula_id']));
			} else {
				$this->Session->setFlash('Erro ao tentar incluir.', 'default', array('class' => 'flashError'));
			}
		} else {
			$this->{$this->modelClass}->id = $id;
			$this->request->data = $this->{$this->modelClass}->read();
		}

		$ano_matricula = $this->MatriculaDisciplina->Matricula->get_ano($this->request->data[$this->modelClass]['matricula_id']);
		
		$this->set('enturmacao', $this->MatriculaDisciplina->Enturmacao->get_lista($ano_matricula));
		$this->set('nome_aluno', $this->MatriculaDisciplina->Matricula->get_nome_aluno($this->request->data['MatriculaDisciplina']['matricula_id']));
		$this->set('situacoes',  $this->MatriculaDisciplina->carregar_situacao());
	}
	
	public function cancelamento($matricula_id = null){
		
		$options['conditions']['matricula_id'] = $matricula_id;
		
		$options['joins'] = array(
		    array('table' => 'matriculas',
		        'alias' => 'Matricula',
		        'type' => 'LEFT',
		        'conditions' => array(
		            'Matricula.id = MatriculaDisciplina.matricula_id'
		        )
		    ),
		    array('table' => 'alunos',
		        'alias' => 'Aluno',
		        'type' => 'LEFT',
		        'conditions' => array(
		            'Aluno.id = Matricula.aluno_id'
		        )
		    )			    
		);
			
		$options['fields'] = array(
			'Aluno.id',
			'Matricula.aluno_id',
			'Matricula.id',
			'MatriculaDisciplina.matricula_id'
		);
		
		$alunos = $this->MatriculaDisciplina->find('all', $options);
		
		$num_aluno = 0;
		
		foreach($alunos as $aluno){
			
			$conditions = array();
			$conditions['matricula_id']  = $aluno['Matricula']['id'];
			
			$this->MatriculaDisciplina->updateAll(array('MatriculaDisciplina.situacao' => 2),$conditions);
			
		}
		
		$this->redirect($this->referer());
		
	}
	
	public function excluir($id = null){
		
		$this->autoRender = false;
		
		try {
			$this->{$this->modelClass}->delete($id);
		} catch (Exception $e) {
		}
	}
	
	public function gravar_lancamento_notas() {
		
		$this->autoRender = false;
		
		if (!$this->request->data) {
			return;
		}
		
		$ref = $this->request->data[0];
		
		$this->loadModel('CalendarioAcademico');
		$valor_modulo = $this->CalendarioAcademico->get_valor_modulo(null, $ref['MatriculaDisciplina']['ano'], $ref['MatriculaDisciplina']['tipo_serie_id'], $ref['MatriculaDisciplina']['modulo_id']);
		//$num_dias     = $this->CalendarioAcademico->get_num_dias(null, $ref['MatriculaDisciplina']['ano'], $ref['MatriculaDisciplina']['tipo_serie_id'], $ref['MatriculaDisciplina']['modulo_id']);
		
		$sucesso = true;
		$mensagem = '';
		
		foreach ($this->request->data as $key => $obj) {
			
			$bimestre = $this->request->data[$key]['MatriculaDisciplina']['modulo_id'];
			
			$this->request->data[$key]['MatriculaDisciplina']["nota_{$bimestre}b"] = strtoupper($this->request->data[$key]['MatriculaDisciplina']["nota_{$bimestre}b"]);
			$this->request->data[$key]['MatriculaDisciplina']["nota_{$bimestre}b"] = str_replace(',', '.', $this->request->data[$key]['MatriculaDisciplina']["nota_{$bimestre}b"]);
			
			if (!$this->{$this->modelClass}->validar_nota($this->request->data[$key]['MatriculaDisciplina']["nota_{$bimestre}b"], $valor_modulo)) {
				$mensagem .= '<li>' . $obj['MatriculaDisciplina']['nome_aluno'] . ': Nota <b>' . $this->request->data[$key]['MatriculaDisciplina']["nota_{$bimestre}b"] . '</b> inválida!';
				$sucesso = false;
			}
			/*
			if (!$this->{$this->modelClass}->validar_falta($this->request->data[$key]['MatriculaDisciplina']["falta_{$bimestre}b"], $num_dias)) {
				$mensagem .= '<li>' . $obj['MatriculaDisciplina']['nome_aluno'] . ': Falta <b>' . $this->request->data[$key]['MatriculaDisciplina']["falta_{$bimestre}b"] . '</b> inválida!';
				$sucesso = false;
			}	
			*/		
		}
		
		if (!$sucesso) {
		
			return json_encode(array(
				'sucesso' => false,
				//'mensagem' => '<b>Notas e/ou Faltas inválidas:</b><br /><ul>' . $mensagem . '</ul><b>Regras:</b><br /><br />1. Notas devem estar entre 0 e ' . $valor_modulo . '<br />2. Casa decimal separada com "ponto"<br />3. Conceitos: [O]timo,[B]om,[R]egular,[I]nsuficiente<br />4. Faltas devem estar entre 0 e ' . $num_dias
				'mensagem' => '<b>Notas inválidas:</b><br /><ul>' . $mensagem . '</ul><b>Regras:</b><br /><br />1. Notas devem estar entre 0 e ' . $valor_modulo . '<br />2. Casa decimal separada com "ponto"<br />3. Conceitos: [O]timo,[B]om,[R]egular,[I]nsuficiente<br /> '
			));

		}
		
		if ($this->MatriculaDisciplina->saveMany($this->request->data)) {
			$sucesso = true;
		} else {
			$sucesso = false;
			$mensagem = 'Erro ao tentar gravar as notas!';
		}
		
		return json_encode(array(
			'sucesso' => $sucesso,
			'mensagem' => $mensagem
		));
	}

	public function gravar_lancamento_notas_recup() {
		
		$this->autoRender = false;
		
		if (!$this->request->data) {
			return;
		}
		
		$ref = $this->request->data[0];
		

		$this->loadModel('CalendarioAcademico');
		$valor_modulo = $this->CalendarioAcademico->get_valor_modulo(null, $ref['MatriculaDisciplina']['ano'], $ref['MatriculaDisciplina']['tipo_serie_id'], $ref['MatriculaDisciplina']['modulo_id']);
		
		$sucesso = true;
		$mensagem = '';
		
		foreach ($this->request->data as $key => $obj) {
			
			$modulo = $this->request->data[$key]['MatriculaDisciplina']['modulo_id'];
			
			if ($modulo = 5){
				$bimestre = 2;
			}
			
			if ($modulo = 6){
				$bimestre = 4;
			}	
					
			$this->request->data[$key]['MatriculaDisciplina']["nota_recup_{$bimestre}b"] = strtoupper($this->request->data[$key]['MatriculaDisciplina']["nota_recup_{$bimestre}b"]);
			$this->request->data[$key]['MatriculaDisciplina']["nota_recup_{$bimestre}b"] = str_replace(',', '.', $this->request->data[$key]['MatriculaDisciplina']["nota_recup_{$bimestre}b"]);
			
			if (!$this->{$this->modelClass}->validar_nota($this->request->data[$key]['MatriculaDisciplina']["nota_recup_{$bimestre}b"], $valor_modulo)) {
				$mensagem .= '<li>' . $obj['MatriculaDisciplina']['nome_aluno'] . ': Nota <b>' . $this->request->data[$key]['MatriculaDisciplina']["nota_recup_{$bimestre}b"] . '</b> inválida!';
				$sucesso = false;
			}
			
					
		}
		
		if (!$sucesso) {
		
			return json_encode(array(
				'sucesso' => false,
				'mensagem' => '<b>Notas inválidas:</b><br /><ul>' . $mensagem . '</ul><b>Regras:</b><br /><br />1. Notas devem estar entre 0 e ' . $valor_modulo . '<br />2. Casa decimal separada com "ponto"<br />3. Conceitos: [O]timo,[B]om,[R]egular,[I]nsuficiente<br /> '));
		}
		
		if ($this->MatriculaDisciplina->saveMany($this->request->data)) {
			$sucesso = true;
		} else {
			$sucesso = false;
			$mensagem = 'Erro ao tentar gravar as notas!';
		}
		
		return json_encode(array(
			'sucesso' => $sucesso,
			'mensagem' => $mensagem
		));
	}
	
	public function grid($matricula_id = null) {

		$this->autoRender = false;

		$conditions['MatriculaDisciplina.matricula_id'] = $matricula_id;
		
		if ($this->request->data['query'] != '')
			$conditions[$this->request->data['qtype'] . ' LIKE'] = '%' . str_replace(' ', '%', $this->request->data['query']) . '%';
		
		$this->paginate = array(
            'page' => $this->request->data['page'],
            'limit' => $this->request->data['rp'],
            'order' => 'Enturmacao.disciplina_id',
            'conditions' => $conditions,
			'maxLimit' => 1000,
			'recursive' => 2
		);

		$disciplinas = $this->MatriculaDisciplina->Enturmacao->Disciplina->find('list');
		$situacoes   = $this->{$this->modelClass}->carregar_situacao();

		$results = $this->paginate($this->modelClass);

		$data = array();
		$data['page'] = $this->request->data['page'];
		$data['total'] = $this->{$this->modelClass}->find('count', array('conditions' => $conditions, 'recursive' => 2));
		$data['rows'] = array();
		
		foreach($results as $rs) {
			$data['rows'][] = array(
		        'id' => $rs[$this->modelClass]['id'],
		        'cell' => array(
					$rs[$this->modelClass]['id'],					
					$rs['Enturmacao']['Disciplina']['nome'],
					$rs['Enturmacao']['Professor']['nome'],
					@$rs[$this->modelClass]['nota_1b'],
					@$rs[$this->modelClass]['falta_1b'],
					@$rs[$this->modelClass]['nota_2b'],
					@$rs[$this->modelClass]['falta_2b'],
					@$rs[$this->modelClass]['nota_recup_2b'],
					@$rs[$this->modelClass]['nota_3b'],
					@$rs[$this->modelClass]['falta_3b'],
					@$rs[$this->modelClass]['nota_4b'],
					@$rs[$this->modelClass]['falta_4b'],
					@$rs[$this->modelClass]['nota_recup_4b'],
					@$situacoes[$rs[$this->modelClass]['situacao']]					
				)
			);
		}

		return json_encode($data);
	}

	public function incluir($matricula_id = null){
		
		$this->set('title_for_layout', 'Matrícula Disciplina:: Incluir');
		
		if ($this->request->data){
			
			if ($this->{$this->modelClass}->save($this->request->data)){
				
				$this->Session->setFlash('Dados incluídos com sucesso.', 'default', array('class' => 'flashOk'));
				$this->redirect(array('controller' => 'matriculas', 'action' => 'alterar', $this->request->data[$this->modelClass]['matricula_id']));
				
			} else {
				
				$this->Session->setFlash('Erro ao tentar incluir.', 'default', array('class' => 'flashError'));
				
			}
		} else {
			
			$this->request->data[$this->modelClass]['matricula_id'] = $matricula_id;
			
		}
		
		$ano_matricula = $this->MatriculaDisciplina->Matricula->get_ano($this->request->data[$this->modelClass]['matricula_id']);
		
		$this->set('enturmacao', $this->MatriculaDisciplina->Enturmacao->get_lista($ano_matricula));
		$this->set('nome_aluno', $this->MatriculaDisciplina->Matricula->get_nome_aluno($matricula_id));
		$this->set('situacoes',  $this->MatriculaDisciplina->carregar_situacao());
	}
	
	public function lancamento_notas_faltas($enturmacao_id = null){
		
		if ($this->request->is('get')) {
			
			$this->set('title_for_layout', 'Lançamento de Notas e Faltas');
			
			$this->MatriculaDisciplina->Enturmacao->id = $enturmacao_id;
			$this->MatriculaDisciplina->Enturmacao->recursive = 0;
			
			$this->set('enturmacao', $this->MatriculaDisciplina->Enturmacao->read());
						
		} else {
			
			$enturmacao_id = $_POST['enturmacao_id'];
			$bimestre = $_POST['bimestre'];
			
			if (!$bimestre) {
				$this->autoRender = false;
				return false;
			}

			$options['conditions']['enturmacao_id'] = $enturmacao_id;
			$options['order'] = array('Matricula.aluno_numero', 'MatriculaDisciplina.id');
			
			$options['joins'] = array(
			    array('table' => 'matriculas',
			        'alias' => 'Matricula',
			        'type' => 'LEFT',
			        'conditions' => array(
			            'Matricula.id = MatriculaDisciplina.matricula_id'
			        )
			    ),
			    array('table' => 'alunos',
			        'alias' => 'Aluno',
			        'type' => 'LEFT',
			        'conditions' => array(
			            'Aluno.id = Matricula.aluno_id'
			        )
			    )			    
			);
			
			$options['fields'] = array(
				'Aluno.id',
				'Aluno.nome',
				'MatriculaDisciplina.id',
				'MatriculaDisciplina.nota_1b',
				'MatriculaDisciplina.nota_2b',
				'MatriculaDisciplina.nota_3b',
				'MatriculaDisciplina.nota_4b',
				'MatriculaDisciplina.falta_1b',
				'MatriculaDisciplina.falta_2b',
				'MatriculaDisciplina.falta_3b',
				'MatriculaDisciplina.falta_4b',
				'Matricula.ano',
				'Matricula.tipo_serie_id',
			    'Matricula.situacao_academica',
				'Matricula.aluno_numero'
			);
			
			$alunos = $this->MatriculaDisciplina->find('all', $options);

			$this->loadModel('Matricula');
			$situacoes_academicas = $this->Matricula->carregar_situacao_academica();
			
			$this->set('alunos', $alunos);
			$this->set('situacoes_academicas', $situacoes_academicas);
			$this->set('bimestre', $bimestre);

			$this->layout = 'ajax';
			$this->render('lista_alunos_lancamento_notas');
		}
		
	}
	
	public function lancamento_notas_recup($enturmacao_id = null){
		
		if ($this->request->is('get')) {
			
			$this->set('title_for_layout', 'Lançamento de Notas Recuperação');
			
			$this->MatriculaDisciplina->Enturmacao->id = $enturmacao_id;
			$this->MatriculaDisciplina->Enturmacao->recursive = 0;
			
			$this->set('enturmacao', $this->MatriculaDisciplina->Enturmacao->read());
						
		} else {
			
			$enturmacao_id = $_POST['enturmacao_id'];
			$bimestre = $_POST['bimestre'];
			
			if (!$bimestre) {
				$this->autoRender = false;
				return false;
			}

			$options['conditions']['enturmacao_id'] = $enturmacao_id;
			$options['order'] = array('Matricula.aluno_numero', 'MatriculaDisciplina.id');
			
			$options['joins'] = array(
			    array('table' => 'matriculas',
			        'alias' => 'Matricula',
			        'type' => 'LEFT',
			        'conditions' => array(
			            'Matricula.id = MatriculaDisciplina.matricula_id'
			        )
			    ),
			    array('table' => 'alunos',
			        'alias' => 'Aluno',
			        'type' => 'LEFT',
			        'conditions' => array(
			            'Aluno.id = Matricula.aluno_id'
			        )
			    )			    
			);
			
			$options['fields'] = array(
				'Aluno.id',
				'Aluno.nome',
				'MatriculaDisciplina.id',
				'MatriculaDisciplina.nota_recup_2b',
				'MatriculaDisciplina.nota_recup_4b',
				'Matricula.ano',
				'Matricula.tipo_serie_id',
				'Matricula.aluno_numero'
			);
			
			$alunos = $this->MatriculaDisciplina->find('all', $options);
			
			$this->set('alunos', $alunos);
			$this->set('bimestre', $bimestre);

			$this->layout = 'ajax';
			$this->render('lista_alunos_lancamento_recup');
		}
		
	}
	
	public function transferencia($matricula_id = null){
		
		$options['conditions']['matricula_id'] = $matricula_id;
		
		$options['joins'] = array(
		    array('table' => 'matriculas',
		        'alias' => 'Matricula',
		        'type' => 'LEFT',
		        'conditions' => array(
		            'Matricula.id = MatriculaDisciplina.matricula_id'
		        )
		    ),
		    array('table' => 'alunos',
		        'alias' => 'Aluno',
		        'type' => 'LEFT',
		        'conditions' => array(
		            'Aluno.id = Matricula.aluno_id'
		        )
		    )			    
		);
			
		$options['fields'] = array(
			'Aluno.id',
			'Matricula.aluno_id',
			'Matricula.id',
			'MatriculaDisciplina.matricula_id'
		);
		
		$alunos = $this->MatriculaDisciplina->find('all', $options);
		
		$num_aluno = 0;
		
		foreach($alunos as $aluno){
			
			$conditions = array();
			$conditions['matricula_id']  = $aluno['Matricula']['id'];
			
			$this->MatriculaDisciplina->updateAll(array('MatriculaDisciplina.situacao' => 7),$conditions);
			
		}
		
		$this->redirect($this->referer());
		
	}
	
	
}